篩選語境篩從表格篩選出需要的列以後,被篩選出來的列該如何做運算呢,也許就會涉及到列語境的問題。
列語境簡單來說就是針對單一列做的運算,可以想像成對篩選語境篩出來的列新增一個欄位,而這個欄位是由前面其他欄位相加減乘除而成。
在 DAX 的計算過程中,列語境不一定存在,因為並非每次計算都要新增欄位。像是大家熟悉的 SUM(order[total_amount])
就是將篩選出來的所有列,針對 total_amount 這個欄位做加總。這樣的計算就沒有用到針對單一列的運算。
在列語境中,最常看到的是同一列不同欄位之間的運算,像是:
Gross Profit := SUMX ( order, order[Amount] – order[TotalCost] )
在(篩選過)的 order 表格中,先將每一列的 order[Amount] 與 order[Total Cost] 相減後,再將所有列得出的計算結果相加。其中: 在計算 order[Amount] - order[TotalCost] 時,是一列一列計算,這一列計算完,再算下一列,所謂的這一列 就是列語境:對 order 的每一列都做完這一列的 Amount 欄位以及 TotalCost 欄位相減後,再將它們相加。
常看到的 AVERAGEX()
, MAXX()
等都有用到列語境
另外,在計算時,如果要互相加減乘除的欄位來自不同表格,就需要用到 RELATED()
函數。比方說每樣產品貝課的稅率不同,要計算稅後營收,這時候就可以使用 RELATED()
函數: Sales After TAX = SUMX( order, order[Total_amount] * (1 - RELATED(Product[tax_rate]))
。
每一列在計算時會逐列將 order 表格這一列所對應到的 product 列的 tax_rate 與 order[Total_amount] 做計算。最後再透過 SUM 將每一列相加。
列語境與篩選語境介紹結束,接下將快速說明如何發布語意模型讓他人取用。
(注意:語意模型開發者需要有 Power BI Pro 的權限,其發布的語意模型才能讓其他人使用。)
完成資料建模以及利用 DAX 定義指標後,就可以發布語意模型 (資料建模 + DAX )。發布的操作如下圖。
發布後,其他人就可以透過連接資料源到語意模型取得資料,自助完成報表。因為需要的指標都以 DAX 的方式呈現在右側的資料中,使用者只需要自己拖拉就可以快速完成報表。
商業使用者除了可以自己使用 Power BI 連接語意模型外,也能使用 Excel 從語意模型取得資料喔。
自助式分析其實不困難,在有資料團隊以前,商業使用者跟 IT 從資料源取得資料後,自己使用 Excel 開發報表,也算是一種自助式分析。但問題就是手動而且商業邏輯散佈在各試算表中,導致花了大量時間,報表間的數字也對不上。
越好的自助式分析工具,越能減少商業使用者自己利用「程式碼」(e.g. Excel Formula, SQL) 定義商業邏輯的情況,但又同時提供足夠的彈性滿足不同顆粒度 (granularity)以及不同商業流程 (事實表) 之間交叉比對的需求。